package cn.jolyoulu.common.core.queue.delayed.observer;

import lombok.Getter;
import cn.jolyoulu.common.core.queue.delayed.DelayedTaskEntity;

/**
 * @Author: JolyouLu
 * @Date: 2023/4/15 19:51
 * @Description
 */
@Getter
public abstract class AbstractObserver<T> implements Observer{

    private final Class<T> ObserverClass;

    /**
     * 你需要观察的那个对象Class
     * 如：super(GenCodeFormBO.class);
     */
    public AbstractObserver(Class<T> observerClass) {
        ObserverClass = observerClass;
    }

    /**
     * 重写该方法，当DelayedTaskEntity任务到底期限，该方法会被回调
     * 注意：若有多个AbstractObserver同时监听相同的Class任务该方法会多个AbstractObserver同时触发
     * @param delayedTask 延迟任务对象
     */
    protected abstract void task(DelayedTaskEntity<T> delayedTask);

    @Override
    @SuppressWarnings("unchecked")
    public void call(DelayedTaskEntity<?> delayedTask) {
        task((DelayedTaskEntity<T>) delayedTask);
    }
}
